#ifndef MACHINE_COMMON_H
#define MACHINE_COMMON_H

#include <stdint.h>
#include <stdbool.h>

// 运行模式枚举
typedef enum {
    MODE_STANDBY,        // 待机模式
    MODE_COOLING,        // 制冷模式
    MODE_CLEANING,       // 清洗模式
    MODE_DEFROST,        // 解冻模式
    MODE_PRESERVATION,   // 保鲜模式
    MODE_MAX             // 模式总数
} MachineMode;

// 错误代码枚举
typedef enum {
    ERROR_NONE = 0,      // 无错误
    ERROR_TEMP_SENSOR,   // 温度传感器错误
    ERROR_CURRENT_SENSOR,// 电流传感器错误
    ERROR_OVERHEAT,      // 过热错误
    ERROR_DEFROST_TIMEOUT,// 解冻超时
    ERROR_MOTOR_CURRENT, // 电机电流异常
    ERROR_MOTOR_PROTECTION // 电机保护
} ErrorCode;

// 传感器数据结构体
typedef struct {
    float cabinet_temp;   // 柜体温度 (℃)
    float material_temp;  // 原料温度 (℃)
    uint32_t motor_current;// 主电机电流 (mA)
    bool temp_sensor_ok;  // 温度传感器状态
    bool current_sensor_ok;// 电流传感器状态
} SensorData;

// 设备状态结构体
typedef struct {
    MachineMode current_mode;
    bool in_error;
    ErrorCode error_code;
    uint32_t mode_runtime; // 模式运行时间(秒)
    
    // 设备运行状态
    bool comp_running;    // 压缩机运行状态
    bool bypass_valve;    // 旁通阀状态
    bool cooling_valve;   // 制冷阀状态
    bool precool_valve;   // 预冷阀状态
    bool motor_running;   // 主电机状态
    bool pump_running;    // 膨化泵状态
    bool mixer_running;   // 搅拌机状态
    bool sterilize_on;    // 杀菌灯状态
} DeviceState;

// 模式配置参数
typedef struct {
    // 制冷参数
    float cooling_target;    // 制冷目标温度 (-3℃)
    float cooling_hyst;      // 制冷回差 (1℃)
    uint32_t cooling_min_current; // 电机最小电流 (200mA)
    uint32_t cooling_max_current; // 电机最大电流 (800mA)
    
    // 解冻参数
    float defrost_target;    // 解冻目标温度 (5℃)
    uint32_t defrost_timeout;// 解冻超时时间 (1800秒)
    
    // 保鲜参数
    float preservation_target;// 保鲜目标温度 (4℃)
    float preservation_hyst;  // 保鲜回差 (1℃)
    
    // 清洗参数
    uint32_t cleaning_phase1_time; // 阶段1时间(秒)
    uint32_t cleaning_phase2_time; // 阶段2时间(秒)
    uint32_t cleaning_phase3_time; // 阶段3时间(秒)
    float cleaning_target_temp;    // 清洗目标温度(℃)
} ModeConfig;

#endif // MACHINE_COMMON_H
